/*
你有一条项链，它由 N 个随机排列的红、白和蓝色的珠子组成（3 <= N <= 350）。下面的例子展示了两条 N = 29 时的项链：

1 2                              1 2
r b b r                           b r r b
r         b                       b         b
r           r                     b           r
r             r                   w             r
b               r                 w               w
b                 b               r                 r
b                 b               b                 b
b                 b               r                 b
r               r                 b               r
b             r                   r             r
b           r                     r           r
r       r                         r       b
r b r                            r r w
Figure A                     Figure B

r red bead
b blue bead
w white bead

项链上的第一个和第二个珠子已经在图中标出了。
图 A 也可以用一个由 b 和 r 组成的字符串直接表示，b 代表蓝色而 r 代表红色，如下所示：brbrrrbbbrrrrrbrrbbrbbbbrrrrb。

假设你想从项链的某处将它截断拉直；接着从一端向另外一端数收集同颜色的珠子，直到碰到一个不同颜色的珠子为止；然后再从另外一端做同样的操作。(一端收集的珠子颜色可以不同于另一端的。)

请想办法找到一个截断项链的位置，能够让我们尽量多地收集到同色的珠子。

例子
如图 A 中的项链，从第 9 和第 10 个或者第 24 和 第 25 个珠子中间截断，则我们可以收集到 8 个珠子。

图 B 中的项链有白色的珠子，当遇到白色的珠子时，它既可以作为蓝色的珠子看待，也可以作为红色的珠子看待，由收集珠子时的需求决定。包含有白色珠子的项链则会由 r、b 和 w 字符组成的字符串来表示。

请编写一个程序计算从某条项链中能够收集到多少个珠子。

输入格式
第一行： N，项链上珠子的个数

第二行：一个字符串，长度为 N，由 r、b 和 w字符组成

输入样例
29 wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
输出格式
输出一行字符，它应该包含了计算出的结果。

输出样例
11

*/


#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#if defined(_WIN32) && !defined(__cplusplus)
#define inline __inline
#endif


#include <stdio.h>

#define max(a,b)    (((a) > (b)) ? (a) : (b))

// 从第startIndex个珠子的左边切断项链
int GetRightBeadNum(const char *beads, int beadsNum, int startIndex)
{
	char color = beads[startIndex];
	int num = 0;
 	for (int i = startIndex; ; num++, i = (i + 1) % beadsNum)
	{
		if (num == beadsNum) break;
		if(color == 'w') color = beads[i];
		if (color == 'w' || beads[i] == 'w') continue;
		if (beads[i] != color) break;			
	}
	return num;
}

// 从第startIndex个珠子的左边切断项链
int GetLeftBeadNum(const char *beads, int beadsNum, int startIndex)
{
	int realStartIndex = (startIndex - 1 + beadsNum) % beadsNum;
	char color = beads[realStartIndex];
	int num = 0;
	for (int i = realStartIndex; ; num++, i = (i - 1 + beadsNum) % beadsNum)
	{
		if (num == beadsNum) break;
		if (color == 'w') color = beads[i];
		if (color == 'w' || beads[i] == 'w') continue;
		if (beads[i] != color) break;
	}
	return num;
}

int main()
{
	int n;
	char beads[400];

	scanf("%d", &n);
	scanf("%s", beads);

	int maxBeadsNum = 0;
	for (int i = 0; i < n; i++)
	{
		int right = GetRightBeadNum(beads, n, i);
		int left = GetLeftBeadNum(beads, n, i);
		maxBeadsNum = max(maxBeadsNum, right + left);

		if (maxBeadsNum >= n)
		{
			maxBeadsNum = n;
			goto end;
		}
	}

end:
	printf("%d\n", maxBeadsNum);
	return 0;
}
